#include #include #include #define NODE_2 2 #define RX_PIN D7 #define TX_PIN D6 uint8_t macNode1[] = {0x58, 0xE6, 0xC5, 0x19, 0xAD, 0xC8}; HardwareSerial mp3Serial(1); JQ6500_Serial mp3(mp3Serial); // Match struct from master typedef struct { int targetID; int command; } Message; void OnDataRecv(const esp_now_recv_info_t *info, const uint8_t *incomingData, int len) { Serial.println("Packet received"); Message msg; memcpy(&msg, incomingData, sizeof(msg)); // Only respond if meant for Node 2 if (msg.targetID != NODE_2) return; Serial.println("Playing track 4"); mp3.playFileByIndexNumber(1); } void setup() { Serial.begin(115200); // --- MP3 INIT (KEEP EXACT) --- mp3Serial.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); delay(3000); mp3.reset(); delay(1000); mp3.setSource(MP3_SRC_BUILTIN); delay(500); mp3.setVolume(25); delay(500); Serial.println("MP3 Ready"); // --- ESP-NOW --- WiFi.mode(WIFI_STA); WiFi.disconnect(); if (esp_now_init() != ESP_OK) { Serial.println("ESP-NOW init failed"); return; } esp_now_peer_info_t peer = {}; memcpy(peer.peer_addr, macNode1, 6); peer.channel = 0; peer.encrypt = false; esp_now_add_peer(&peer); esp_now_register_recv_cb(OnDataRecv); Serial.println("Node 2 ready"); } void loop() {}